package com.ld.admin.util.permission;

import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.jsoup.nodes.Element;

import com.ld.admin.model.system.SysMenuModel;

public interface PermissionChecker {
    /**
     * 是否检查权限，顶级管理员用户不检查
     * 
     * @Title checkPermission
     * @author 吕凯
     * @date 2019年6月19日 下午4:05:15
     * @param request
     * @return boolean
     */
    public boolean checkPermission(HttpServletRequest request);

    /**
     * 获取url在权限中的映射url[普通url转权限url]
     * 
     * @Title getUrlPerm
     * @author 吕凯
     * @date 2019年6月11日 下午1:55:28
     * @param url
     * @return String
     */
    public String getUrlPerm(String url);

    /**
     * 获取url对应的权限model
     * 
     * @Title getPermModleByUrl
     * @author 吕凯
     * @date 2019年6月11日 下午2:03:21
     * @param url
     * @return SysMenuModel
     */
    public SysMenuModel getPermModleByUrl(String url);

    /**
     * 根据pageId获取权限model
     * 
     * @Title getPermByPageId
     * @author 吕凯
     * @date 2019年6月19日 下午4:24:55
     * @param pageId
     * @return SysMenuModel
     */
    public SysMenuModel getPermByPageId(String pageId);

    /**
     * 从session中获取用户的权限主题（url或者角色集合）
     * 
     * @Title getUserPermURLs
     * @author 吕凯
     * @date 2019年4月13日 上午8:55:54
     * @param session
     * @return Set<String>
     */
    public Set<String> getUserPermSubjects(HttpSession session);

    public Set<String> getUserPermSubjects(HttpServletRequest request);

    /**
     * 获取pageId或dataUrl对应的权限对象
     * 
     * @Title getPermModel
     * @author 吕凯
     * @date 2019年9月21日 上午9:04:20
     * @param pageId
     * @param dataUrl
     * @return SysMenuModel
     */
    public SysMenuModel getPermModel(String pageId, String dataUrl);

    public boolean checkPerm(HttpServletRequest request, String pageId, String dataUrl);

    /**
     * 通过url检查权限
     * 
     * @Title checkPerm
     * @author 吕凯
     * @date 2020年9月16日 下午5:02:57
     * @param request
     * @param userPermUrls
     * @param childPermModle
     * @return boolean
     */
    public boolean checkPerm(HttpServletRequest request, SysMenuModel permModle);

    /**
     * 检查ele元素是否存在某权限
     * 
     * @Title checkElePerm
     * @author 吕凯
     * @date 2019年9月21日 上午8:58:33
     * @param request
     * @param childEle
     * @param pageId
     *            pageId属性值，对应权限表中的pageId，唯一
     * @param dataUrl
     *            链接地址，可能不唯一
     * @return boolean
     */
    public boolean checkElePerm(HttpServletRequest request, Element childEle, String pageId, String dataUrl);

}
